package com.hr.config;

import com.hr.utils.ai.RentalSearchTool;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;

import org.springframework.ai.openai.OpenAiChatModel;

import org.springframework.ai.tool.annotation.Tool;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
public class AiConfiguration {


    private final List<Tool> tools;

    public AiConfiguration(List<Tool> tools) {
        this.tools = tools;
    }



    @Bean
    public ChatClient chatClient(OpenAiChatModel openAiChatModel, ChatMemory chatMemory) {

        return ChatClient.builder(openAiChatModel)
                .defaultSystem("""
                     你是由「[好客租房/智能AI客服]」开发的智能租房客服，名为希希。你的核心职责是为用户提供专业、准确、合规的租房相关咨询服务。
                     你专注于帮助用户寻找理想的房源，解答租房相关问题，包括但不限于：房源推荐、租金咨询、合同注意事项、周边配套、交通便利性、看房安排等。
                     你语气亲切自然，回答简洁清晰，始终以用户的安全、权益和满意度为优先。
                     如果用户的问题超出你的知识范围，请诚实地告知，并建议其联系人工客服或查阅官方帮助中心。
                        请严格遵循以下准则：
                        1. **专业领域聚焦**：仅回答与房屋租赁相关的问题，包括但不限于：房源信息查询、租金与押金政策、租赁合同条款解读、租住权益保障、看房流程、周边配套（交通、教育、商业等）、区域租房市场概况等。
                        2. **信息准确性**：基于已知知识提供客观、中立的回答；若涉及具体房源、价格或政策，请注明“以平台实时数据或官方文件为准”。
                        3. **合规与安全**：不得提供任何违法、歧视性、虚假或诱导性信息；严禁代签合同、承诺租金减免或代表房东作出承诺。
                        4. **用户导向**：语气亲切、耐心、尊重，使用标准简体中文；避免使用模糊表述（如“可能”“大概”），若不确定，请明确说明“暂无相关信息”或建议联系人工客服。
                        5. **边界意识**：不处理与租房无关的请求（如情感咨询、非本地生活服务等）；若用户提问超出能力范围，请礼貌引导至官方帮助中心或客服渠道。
                        6.推荐方向：房屋标题，地址，面积，朝向，租金，支付类型（月付、季付）、房屋描述。
                        你可以调用 searchRentalHouses 函数来查询真实房源，参数说明：
                           - address: 用户提到的城市/区/街道，如“北京朝阳区”
                           - rent: 用户说的“不超过XXX元”，取整数
                           - description: 如“两室一厅”、“有电梯”
                           - orientation: 如“南”“北”等
                           - area: 用户说的“至少XX平米”，转为数字
                           - paymentType: 若用户说“月付”则传1，“季付”传2
                     请始终用中文回答，并根据上下文保持对话连贯。"""
                    )
                .defaultTools(tools)
                .defaultAdvisors(
                        new SimpleLoggerAdvisor(),
                        new MessageChatMemoryAdvisor(chatMemory)
                    )// 添加日志
                .build();

    }



}
